# -*- coding: utf-8 -*-
"""
字典管理模块，处理字典的加载、缓存和转换
"""

import os
from .train_dict import load_excel_dict
from .config import DICT_TYPES, DICT_SHEETS

# 预加载所有字典数据到全局缓存
DICT_CACHE = {}


def initialize_dict_cache():
    """初始化字典缓存"""
    global DICT_CACHE

    # 检查是否已经初始化过
    if DICT_CACHE:
        print("📚 字典缓存已存在，跳过重复初始化")
        return

    # 检查是否为热重载进程
    if os.environ.get("UVICORN_RELOAD_PROCESS"):
        print("🔄 热重载进程，跳过字典初始化...")
        return

    print("📚 开始初始化字典缓存...")
    for dict_type, file_path in DICT_TYPES.items():
        sheet_name = DICT_SHEETS.get(dict_type, "")
        if sheet_name:
            DICT_CACHE[dict_type] = load_excel_dict(file_path, sheet_name)
            print(f"已加载字典: {dict_type} - {len(DICT_CACHE[dict_type])} 条记录")
            if dict_type == "问题性质" and DICT_CACHE[dict_type]:
                print(f"  问题性质字典示例: {list(DICT_CACHE[dict_type].items())[:3]}")

    print("✅ 字典缓存初始化完成")


def get_dict_name_cached(dict_type: str, value: str) -> str:
    """使用缓存的字典数据获取字典项（字典值转字典项）"""
    # 如果字典缓存为空，尝试初始化
    if not DICT_CACHE:
        initialize_dict_cache()

    if dict_type in DICT_CACHE:
        # 处理多个值的情况（用分号分隔）
        if ";" in value:
            values = value.split(";")
            names = []
            for v in values:
                v = v.strip()
                # 如果值在字典中，使用对应的字典项，否则跳过（不保留原值）
                if v in DICT_CACHE[dict_type]:
                    name = DICT_CACHE[dict_type][v]
                    names.append(name)
            return ",".join(names)

        # 处理单个值的情况
        cleaned_value = value.strip()
        # 如果值在字典中，使用对应的字典项，否则返回空字符串（表示转换失败）
        if cleaned_value in DICT_CACHE[dict_type]:
            result = DICT_CACHE[dict_type][cleaned_value]
            print(
                f"字典查询: 类型='{dict_type}', 输入='{cleaned_value}', 输出='{result}' (转换成功)"
            )
            return result
        else:
            print(
                f"字典查询: 类型='{dict_type}', 输入='{cleaned_value}', 输出='' (转换失败)"
            )
            return ""
    else:
        print(f"警告: 字典类型 '{dict_type}' 不在缓存中")
        return ""


# 延迟初始化字典缓存，避免在模块导入时立即执行
# 改为在第一次使用时初始化
